/*
 *  SelectionOperator.h
 *  Genetski
 *
 *  Created by Srđan Rašić on 11/19/11.
 *
 */

#pragma once
#include <utility>
#include <vector>
#include "Population.h"
#include "Chromosome.h"

/**
 * Defines interface for selection operators.
 */
class SelectionOperator {
protected:
	
public:
	virtual std::vector<int> Select(Population& pop, unsigned int numberOfIndividuals) = 0;
};


/**
 * Performs Roulete Wheel Selection.
 */
class RouletteWheelSelectionOperator : public SelectionOperator {
public:
	virtual std::vector<int> Select(Population& pop, unsigned int numberOfIndividuals);
};

/**
 * Performs K-Tournament Selection.
 */
class KTournamentSelectionOperator : public SelectionOperator {
public:
	virtual std::vector<int> Select(Population& pop, unsigned int numberOfIndividuals);
};